Jak poznam v aplikaci, ze dostala fokus?

Otázka od: Frantisek Mlcoch

4. 11. 2004 12:33

Prosim, vi nekdo jak to zjistit (viz subj.). Dostane aplikace nejakou zpravu
od windows?

F.



Odpovedá: Petr Brant

4. 11. 2004 12:53

Tohle jsem nasel v MSDN, zrejme je to to, co potrebujes:

The WM_ACTIVATE message is sent to both the window being activated and the
window being deactivated. If the windows use the same input queue, the
message is sent synchronously, first to the window procedure of the
top-level window being deactivated, then to the window procedure of the
top-level window being activated. If the windows use different input queues,
the message is sent asynchronously, so the window is activated immediately.
Syntax
 WM_ACTIVATE

     WPARAM wParam
     LPARAM lParam;
     
Parameters
 wParam
  The low-order word specifies whether the window is being
activated or deactivated. This parameter can be one of the following values.
The high-order word specifies the minimized state of the window being
activated or deactivated. A nonzero value indicates the window is minimized.

 WA_ACTIVE
  Activated by some method other than a mouse click (for
example, by a call to the SetActiveWindow function or by use of the keyboard
interface to select the window).
 WA_CLICKACTIVE
  Activated by a mouse click.
 WA_INACTIVE
  Deactivated.
 lParam
  Handle to the window being activated or deactivated,
depending on the value of the wParam parameter. If the low-order word of
wParam is WA_INACTIVE, lParam is the handle to the window being activated.
If the low-order word of wParam is WA_ACTIVE or WA_CLICKACTIVE, lParam is
the handle to the window being deactivated. This handle can be NULL.
Return Value
 If an application processes this message, it should return zero.


Zdravim

RNDr. Petr Brant [brant@dcomm.cz]
http://brant.wz.cz <http://brant.wz.cz>


> Prosim, vi nekdo jak to zjistit (viz subj.). Dostane aplikace nejakou
> zpravu
> od windows?
>


Odpovedá: Ondrej Kelle

4. 11. 2004 13:03

> The WM_ACTIVATE message is sent to both the window being
> activated and the window being deactivated.
[snip]

Ak som spravne pochopil otazku, nie je to ono. WM_ACTIVATE dostava kazde
top-level okno pri strate/ziskani focusu, aj v ramci jedneho
procesu/aplikacie. Spracovanie tejto spravy je vo VCL spristupnene cez
TCustomForm.OnActivate, OnDeactivate.

Pri aktivacii aplikacie (t.j. prechode focusu z inej aplikacie) dostane
aplikacia spravu WM_ACTIVATEAPP.
Vo VCL je toto spristupnene cez Application.OnActivate, OnDeactivate.

HTH
TOndrej